package Day_0131.JVM;

/**
 * @author zxc
 * @date 2023/01/31 17:57
 **/
public class Heap_Stack {
    public static void main(String[] args) {
        /**
         * JVM中，谈一谈堆（Heap）和栈（Stack）之间的区别
         *
         * （1）栈是运行时单位，代表着逻辑，内含基本数据类型和堆中对象引用，所在区域连续，没有碎片；
         * （2）堆是存储单位，代表着数据，可被多个栈共享（包括成员中基本数据类型、引用和引用对象），所在区域不连续，会有碎片。
         *
         * 1、功能不同
         * （1）栈内存用来存储局部变量和方法调用，（栈，主要用于方法调用;）
         * （2）而堆内存用来存储Java中的对象。（堆，主要用于存储对象实例;）
         *  无论是成员变量，局部变量，还是类变量，它们指向的对象都存储在堆内存中。
         * 2、共享性不同
         * （1）栈内存是线程私有的。
         * （2）堆内存是所有线程共有的。
         * 3、异常错误不同
         * （1）如果栈内存或者堆内存不足都会抛出异常。 栈空间不足：java.lang.StackOverFlowError。
         * （2）堆空间不足：java.lang.OutOfMemoryError。
         * 4、空间大小
         * 栈的空间大小远远小于堆的
         *
         */
    }
}
